﻿// Data/StrategyReportService.cs

using Microsoft.EntityFrameworkCore;
using StrategyReportViewer.DataAccess;
using System.Globalization;

namespace StrategyReportViewer.Data;

public class StrategyReportService
{
    private readonly AppDbContext _context;

    public StrategyReportService(AppDbContext context)
    {
        _context = context;
    }

    public async Task<List<StrategyReport>> GetReportsAsync()
    {
        // 1. 在数据库中找到最新的日期 (最大日期字符串)
        // We filter out null or empty strings to ensure Max() works correctly.
        var latestDateString = await _context.OpenAiContents
            .AsNoTracking()
            .Where(c => !string.IsNullOrEmpty(c.Date)) // 确保日期不为空
            .MaxAsync(c => c.Date); // 直接在数据库中计算最大日期字符串

        // 如果数据库为空或所有日期都无效，则返回一个空列表
        if (latestDateString == null)
        {
            return new List<StrategyReport>();
        }

        // 2. 在数据库中查询所有等于最新日期的数据
        var reportsFromDb = await _context.OpenAiContents
            .AsNoTracking()
            .Where(c => c.Date == latestDateString)
            .OrderBy(c => c.Name) // 在同一天内，可以按品种名称排序
            .ToListAsync();

        // 3. 将数据库实体映射到 UI 模型
        // 这里的代码和之前类似，但现在处理的数据量大大减少了
        var strategyReports = reportsFromDb.Select(dbReport => new StrategyReport
        {
            Pzdm = dbReport.Pzdm,
            Date = dbReport.Date, // 此时 date 肯定不为空
            Title = $"{dbReport.Name} ({dbReport.Pzdm})", // 标题中可以省略日期，因为都是同一天
            CreatedDate = DateTime.ParseExact(dbReport.Date, "yyyyMMdd", CultureInfo.InvariantCulture),
            Content = dbReport.Content ?? "没有内容"
        }).ToList();

        return strategyReports;
    }
}